package com.demo8.basic.domain;

import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.Data;
import java.io.Serializable;
import java.util.List;

@Data
public class PageInfo<T> implements Serializable {
    private static final long serialVersionUID = 1L;

    // 当前页
    private Integer pageNum;
    // 每页的数量
    private Integer pageSize;
    // 总记录数
    private Long total;
    // 总页数
    private Integer pages;
    // 结果集
    private List<T> list;
    // 是否为第一页
    private Boolean isFirstPage;
    // 是否为最后一页
    private Boolean isLastPage;
    // 是否有前一页
    private Boolean hasPreviousPage;
    // 是否有下一页
    private Boolean hasNextPage;

    /**
     * 将 MyBatis-Plus 的 IPage 转换为 PageInfo
     */
    public static <T> PageInfo<T> of(IPage<T> page) {
        PageInfo<T> pageInfo = new PageInfo<>();
        pageInfo.setPageNum((int) page.getCurrent());
        pageInfo.setPageSize((int) page.getSize());
        pageInfo.setTotal(page.getTotal());
        pageInfo.setPages((int) page.getPages());
        pageInfo.setList(page.getRecords());
        pageInfo.setIsFirstPage(page.getCurrent() == 1);
        pageInfo.setIsLastPage(page.getCurrent() >= page.getPages());
        pageInfo.setHasPreviousPage(page.getCurrent() > 1);
        pageInfo.setHasNextPage(page.getCurrent() < page.getPages());
        return pageInfo;
    }

    /**
     * 自定义分页转换
     */
    public static <T> PageInfo<T> of(IPage<?> page, List<T> list) {
        PageInfo<T> pageInfo = new PageInfo<>();
        pageInfo.setPageNum((int) page.getCurrent());
        pageInfo.setPageSize((int) page.getSize());
        pageInfo.setTotal(page.getTotal());
        pageInfo.setPages((int) page.getPages());
        pageInfo.setList(list);
        pageInfo.setIsFirstPage(page.getCurrent() == 1);
        pageInfo.setIsLastPage(page.getCurrent() >= page.getPages());
        pageInfo.setHasPreviousPage(page.getCurrent() > 1);
        pageInfo.setHasNextPage(page.getCurrent() < page.getPages());
        return pageInfo;
    }
}
